/**
 * \file regelwerk.h
 *
 * \brief Enthält die Klasse Regelwerk.
 */


#ifndef _REGELWERK_H_
#define _REGELWERK_H_


/** \class Regelwerk
*       \brief Die Klasse Regelwerk wird von Feld genutzt um für einzelne Zellen zu bestimmen, wie sie sich in der nächsten Generation verhalten.
*
* Ob eine Zelle in der nächsten Generation lebt oder stirbt hängt von der Anzahl der lebenden Nachbarn ab. Es muss somit gespeichert sein, was für eine momentan lebende Zelle passiert, wenn 0 bis 8 Nachbarn leben.
* Gleiches gilt für eine tote Zelle.
*/

class Regelwerk 
{
        private:
                bool regeln[2][9]; /**< Das Array regeln dient der Speicherung der Regeln für die 18 Fälle. */
        
        public:
                /**
                * \fn void setRule(bool vor, int lebNachbarn, bool nach)
                * \brief Setzt die Regel für den über die Parameter spezifizierten Fall.
                * \param vor Der aktuelle Zustand der Zelle: false = tot, true = lebend.
                * \param lebNachbarn Die Anzahl der lebenden Nachbarn, für welche die Regel geändert werden soll.
                * \param nach Der Zustand, welchen eine Zelle in der nächsten Generation annehmen soll, wenn sie aktuell den Zustand vor und lebNachbarn viele lebende Nachbarn hat.
                */
                void setRule(bool, int, bool);
                
                /**
                * \fn bool getRule(bool vor, int lebNachbarn)
                * \brief Gibt den Zustand in der nächstne Generation für eine Zelle mit aktuellem Zustand vor und lebNachbarn vielen lebenden Nachbarn zurück.
                * \param vor Der aktuelle Zustand der Zelle: false = tot, true = lebend.
                * \param lebNachbarn Die Anzahl der lebenden Nachbarn, für welche die Regel abgefragt werden soll.
                * \return Der Zustand der Zelle in der nächsten Generation: 0=tot, 1=lebend.
                */
                bool getRule(bool vor, int lebNachbarn);      
                /**
                * \fn Regelwerk()
                * \brief Der Standard Konstruktor.
                */
                Regelwerk();
                
                        /**
                * \fn Regelwerk()
                * \brief Der Standard Destruktor.
                */
                ~Regelwerk();
                
};
#endif

